//子路由
let express = require("express"); //绝对路径

//创建路由对象
let Router = express.Router(); //Router==app
let query = require("../../db/mysql");

/*
  用户管理：restful接口规范
    * 验证用户名是否存在 ：get
    * 注册 : post
    * 登录 : get
    * 退出 : delete
    * 删除用户 : delete
    * 查询用户列表 :get
    * 修改用户信息 :put
*/

//验证用户名是否存在
// Router.get("/checkname", (req, res) => {
//   let { name } = req.query;
//   let data = {};
//   let sql = `SELECT * FROM user_inf WHERE name='${name}'`;
//   //query是一个异步的方法
//   query(sql)
//     .then((result) => {
//       console.log(res, "结果");
//       if (result.length) {
//         data = {
//           code: 0,
//           message: "不允许注册，用户名已存在",
//         };
//       } else {
//         data = {
//           code: 1,
//           message: "允许注册",
//         };
//       }

//       res.send(data);
//     })
//     .catch((err) => {
//       console.log(err, "错误");
//       data = {
//         code: 0,
//         message: "服务器异常",
//         err,
//       };

//       res.send(data);
//     });
// });

Router.get("/checkname", async (req, res) => {
  let { name } = req.query;
  let data = {};
  try {
    let sql = `SELECT * FROM user_inf WHERE name='${name}'`;
    let p = await query(sql); //等待成功的结果:await的缺陷是，只能接收成功的回调数据resolve(res);如果这里出问题，会影响下面的代码的执行
    console.log(p);
    if (p.length) {
      data = {
        code: 0,
        message: "不允许注册，用户名已存在",
      };
    } else {
      data = {
        code: 1,
        message: "允许注册",
      };
    }
  } catch (err) {
    console.log(err); //可以捕获promise里面reject的结果
  }
  // res.send("await的用法");
  res.send(data);
});

/*
  

  let p1 = new Promise((resolve, reject) => {});//异步代码块1
  let p2 = new Promise();//异步代码块1
  //p1必须在p2之前完成
  promise解决回调地狱；解决异步代码的顺序 
  let p3 = new Promise();
  p3.all(['p1','p2'],cb)；

  async await :用这个方式，能完全解决回调的问题。把异步的代码改成同步的写法
  try catch
*/

// try {
//   let num = 777;
//   let count = 444 + num;
//   console.log(count);
// } catch (err) {
//   console.log(err, "出错了");
// }

// console.log("今天我好帅哦!");

module.exports = Router;
